#!/bin/bash
# 创建项目目录结构
mkdir -p supermarket_management/include    # 存储头文件
mkdir -p supermarket_management/src        # 存储源文件
mkdir -p supermarket_management/data       # 存储数据文件
mkdir -p supermarket_management/bin        # 存储可执行文件
mkdir -p supermarket_management/obj        # 存储对象文件
mkdir -p supermarket_management/img        # 存储图片
mkdir -p supermarket_management/log        # 存储日志文件

# 创建头文件并添加防止重复编译的宏
create_header() {
    local header_file=$1
    local header_guard=$(basename $header_file | tr '[:lower:]' '[:upper:]' | tr '.' '_')
    echo "#ifndef __${header_guard}__" > $header_file
    echo "#define __${header_guard}__" >> $header_file
    echo "" >> $header_file
    echo "// 声明函数" >> $header_file
    echo "" >> $header_file
    echo "#endif // __${header_guard}__" >> $header_file
}

# 创建原有的头文件
create_header "supermarket_management/include/goods.h"    # 商品相关结构体和函数声明的头文件
create_header "supermarket_management/include/list.h"       # 链表操作相关函数声明的头文件
create_header "supermarket_management/include/utils.h"      # 公用工具函数声明的头文件

# 新增根据你设计需要的头文件
create_header "supermarket_management/include/user.h"       # 用户相关结构体和函数声明的头文件
create_header "supermarket_management/include/order.h"      # 订单相关结构体和函数声明的头文件

# 创建原有的源文件
touch supermarket_management/src/main.c                     # 主程序入口文件
touch supermarket_management/src/goods.c                  # 商品功能实现的源文件
touch supermarket_management/src/list.c                     # 链表操作实现的源文件
touch supermarket_management/src/utils.c                    # 公用工具函数实现的源文件

# 新增根据你设计需要的源文件
touch supermarket_management/src/user.c                     # 用户功能实现的源文件
touch supermarket_management/src/order.c                    # 订单功能实现的源文件

# 创建项目说明文档
touch supermarket_management/README.md                      # 项目说明文档

# 创建数据文件
touch supermarket_management/data/goods.txt               # 商品信息文件
touch supermarket_management/data/users.txt               # 用户信息文件
touch supermarket_management/data/orders.txt              # 订单信息文件

# 在每个 .c 文件中插入 #include "include/head.h"
add_include_to_c() {
    local c_file=$1
    echo '#include "../include/head.h"' | cat - $c_file > temp && mv temp $c_file
}

# 在 main.c 中添加完整的UI框架
cat > supermarket_management/src/main.c << 'EOL'
#include <stdio.h>
#include <stdlib.h>

// 函数声明
void show_login_menu();
void show_user_menu();
void show_admin_menu();
int login_system();

int main(int argc, char const *argv[])
{
    printf("=== 无人超市管理系统 ===\n");
    
    // 主循环
    while (1) {
        show_login_menu();
        int user_type = login_system();
        
        if (user_type == 1) {
            // 管理员界面
            show_admin_menu();
        } else if (user_type == 2) {
            // 普通用户界面
            show_user_menu();
        } else if (user_type == 0) {
            // 退出系统
            printf("感谢使用，再见！\n");
            break;
        }
    }
    
    return 0;
}

// 显示登录菜单
void show_login_menu() {
    printf("\n========== 登录菜单 ==========\n");
    printf("1. 用户登录\n");
    printf("2. 用户注册\n");
    printf("3. 修改密码\n");
    printf("4. 忘记密码\n");
    printf("0. 退出系统\n");
    printf("请选择操作: ");
}

// 显示用户菜单
void show_user_menu() {
    printf("\n========== 用户购物界面 ==========\n");
    printf("1. 浏览商品\n");
    printf("2. 今日特价\n");
    printf("3. 商品分类\n");
    printf("4. 商品搜索\n");
    printf("5. 我的购物车\n");
    printf("6. 我的订单\n");
    printf("7. 个人中心\n");
    printf("0. 退出登录\n");
    printf("请选择操作: ");
}

// 显示管理员菜单
void show_admin_menu() {
    printf("\n========== 管理员管理界面 ==========\n");
    printf("1. 商品管理\n");
    printf("2. 用户管理\n");
    printf("3. 销售统计\n");
    printf("4. 系统设置\n");
    printf("0. 退出登录\n");
    printf("请选择操作: ");
}

// 登录系统（暂时返回模拟数据）
int login_system() {
    int choice;
    scanf("%d", &choice);
    
    switch (choice) {
        case 1:
            printf("模拟登录：管理员登录成功\n");
            return 1;
        case 2:
            printf("模拟登录：用户注册成功\n");
            return 2;
        case 3:
            printf("模拟功能：修改密码\n");
            return -1;
        case 4:
            printf("模拟功能：忘记密码\n");
            return -1;
        case 0:
            return 0;
        default:
            printf("无效选择，请重新输入\n");
            return -1;
    }
}
EOL

# 对每个 .c 文件应用
add_include_to_c "supermarket_management/src/main.c"
add_include_to_c "supermarket_management/src/goods.c"
add_include_to_c "supermarket_management/src/list.c"
add_include_to_c "supermarket_management/src/utils.c"
add_include_to_c "supermarket_management/src/user.c"
add_include_to_c "supermarket_management/src/order.c"

# 创建并写入 head.h 文件 - 包含所有头文件和UI声明
cat > supermarket_management/include/head.h << 'EOL'
#ifndef __HEAD_H__
#define __HEAD_H__

// 导入项目头文件
#include "goods.h"
#include "user.h"
#include "order.h"
#include "list.h"
#include "utils.h"

// 定义宏定义
#define LOG_FILE "log/error.log"
#define GOODS_FILE "data/goods.txt"
#define USERS_FILE "data/users.txt"
#define ORDERS_FILE "data/orders.txt"

// UI函数声明
void show_login_menu();
void show_user_menu();
void show_admin_menu();
int login_system();

#endif
EOL

# 修正 Makefile 语法问题
cat > Makefile << 'EOL'
# 编译器和编译选项
CC = gcc
CFLAGS = -Wall -Werror -I./supermarket_management/include

# 目录定义
SRC_DIR = supermarket_management/src
OBJ_DIR = supermarket_management/obj
BIN_DIR = supermarket_management/bin

# 源文件和目标文件
SRCS = \$(wildcard \$(SRC_DIR)/*.c)
OBJS = \$(SRCS:\$(SRC_DIR)/%.c=\$(OBJ_DIR)/%.o)

# 可执行文件
TARGET = \$(BIN_DIR)/supermarket

# 默认目标
all: \$(TARGET)

# 链接生成可执行文件
\$(TARGET): \$(OBJS)
	@mkdir -p \$(BIN_DIR)
	\$(CC) \$(CFLAGS) -o \$@ \$^

# 编译每个源文件生成目标文件
\$(OBJ_DIR)/%.o: \$(SRC_DIR)/%.c
	@mkdir -p \$(OBJ_DIR)
	\$(CC) \$(CFLAGS) -c -o \$@ \$<

# 清理
clean:
	rm -rf \$(OBJ_DIR) \$(BIN_DIR)

.PHONY: all clean
EOL

echo "项目框架生成完成！"
echo "包含："
echo "- 完整的UI菜单系统（登录菜单、用户菜单、管理员菜单）"
echo "- 三大核心模块（商品、用户、订单）"
echo "- 编译系统"
echo ""
echo "使用方法："
echo "make    # 编译项目"
echo "make clean  # 清理编译文件"